/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.gob.fonafe.dao.impl.stored;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import oracle.jdbc.OracleTypes;
import oracle.sql.BLOB;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.StoredProcedure;
import pe.gob.fonafe.domain.BusquedaBean;
import pe.gob.fonafe.domain.MuebleBean;
import pe.gob.fonafe.util.Util;

/**
 *
 * @author Irving
 */
public class ListarGLCMuebleSP extends StoredProcedure{
    
    private static final String PROC_PARAM ="USERGLC.P_OBT_LIST_MUEBLES_GLC";
    
    
    public ListarGLCMuebleSP(DataSource ds) {
       super(ds,PROC_PARAM);

        declareParameter(new SqlParameter("PAR_UBIGEO", Types.VARCHAR));
        declareParameter(new SqlParameter("PAR_TIP_MUEBLE", Types.VARCHAR));
        declareParameter(new SqlParameter("PAR_TIP_CONTRATO", Types.VARCHAR));
        declareParameter(new SqlParameter("PAR_TIP_MONEDA", Types.VARCHAR));
        declareParameter(new SqlParameter("PAR_PRECIO_DESDE", Types.VARCHAR));
        declareParameter(new SqlParameter("PAR_PRECIO_HASTA", Types.VARCHAR));
        declareParameter(new SqlParameter("PAR_ID_EMPRESA", Types.NUMERIC));
        declareParameter(new SqlParameter("PAR_ESTADOACT", Types.NUMERIC));
        declareParameter(new SqlOutParameter("cCursor", OracleTypes.CURSOR,new ListarMuebleRowMapper()));
    }
    
    public Map execute(BusquedaBean bean) {
        Map inputs = new HashMap();
        inputs.put("PAR_UBIGEO", bean.getUbigeo());
        inputs.put("PAR_TIP_MUEBLE", bean.getTipMueble());
        inputs.put("PAR_TIP_CONTRATO", bean.getTipContrato());
        inputs.put("PAR_TIP_MONEDA", bean.getTipMoneda());
        inputs.put("PAR_PRECIO_DESDE", bean.getPrecioDesde());
        inputs.put("PAR_PRECIO_HASTA", bean.getPrecioHasta());
        inputs.put("PAR_ID_EMPRESA", bean.getId_empresa());
        inputs.put("PAR_ESTADOACT", Integer.parseInt(bean.getEstado()));
        return super.execute(inputs);
    }
    
    private static class ListarMuebleRowMapper implements RowMapper<MuebleBean>{

        public MuebleBean mapRow(ResultSet rs, int rowNum) throws SQLException {
            MuebleBean bean = new MuebleBean();
            try{
            bean.setId_mueble(rs.getInt("ID_MUEBLE"));
            bean.setNombre(rs.getString("NOMBRE"));
            bean.setDescripcion(rs.getString("DESCRIPCION"));
            bean.setTipo_moneda(rs.getString("TIPO_MONEDA"));
            bean.setPrecio(rs.getString("precio"));
            bean.setVchPrecio(Util.FormatoPrecio(rs.getString("precio")));
            bean.setTipoContrato(rs.getString("tipoContrato"));
            if(rs.getBlob("foto_principal") != null){
                bean.setFoto_principal(rs.getBlob("foto_principal").getBytes(1, (int)rs.getBlob("foto_principal").length()));
            }
            if(rs.getBlob("planoUbicacion") != null){
                bean.setPlanoUbicacion(rs.getBlob("planoUbicacion").getBytes(1, (int)rs.getBlob("planoUbicacion").length()));
            }
            bean.setDireccion(rs.getString("direccion"));
            bean.setTipo_mueble(rs.getInt("tb_TipoMueble_idTipoMueble"));
            bean.setEstado(rs.getString("estado"));
            bean.setFecha_vencimiento(rs.getDate("fecha_vencimiento"));
            bean.setTb_Ubigeo_id_ubigeo(rs.getInt("tb_Ubigeo_id_ubigeo"));
            bean.setTb_Usuario_id_usuario(rs.getInt("tb_Usuario_id_usuario"));
            bean.setUbigeo(rs.getString("ubigeo"));
            bean.setNom_tipoMueble(rs.getString("tipMueble"));
            bean.setEstadoBien(rs.getString("ESTADOBIEN"));
            }catch(Exception ex){
                ex.printStackTrace();
            }
            return bean;
        }
        
    }
    
    
}
